package com.lin.manager.controller.system;

import com.lin.manager.aop.Log;
import com.lin.manager.common.enums.LogEnum;
import com.lin.manager.common.req.QueryPage;
import com.lin.manager.common.resp.R;
import com.lin.manager.system.entity.SysRoleEntity;
import com.lin.manager.system.service.SysRoleService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * @作者: 林江
 * @创建时间: 2024/3/11
 * @功能:
 */
@Api(tags = "角色管理")
@RestController
@RequestMapping("/role")
public class SysRoleController {

    @Autowired
    SysRoleService sysRoleService;

    @ApiOperation("角色管理 - 分页查询")
    @Log(module = "角色管理", descipt = "分页查询", type = LogEnum.SELECT)
    @GetMapping("listPage")
    public R listPage(QueryPage page) {
        return R.ok(sysRoleService.listPage(page));
    }

    @ApiOperation("角色管理 - 查询所有")
    @Log(module = "角色管理", descipt = "查询所有", type = LogEnum.SELECT)
    @GetMapping("list")
    public R list(QueryPage page) {
        return R.ok(sysRoleService.list(page));
    }

    @ApiOperation("角色管理 - 添加")
    @Log(module = "角色管理", descipt = "添加角色", type = LogEnum.INSERT)
    @PostMapping("add")
    public R add(@RequestBody SysRoleEntity sysRole) {
        sysRoleService.add(sysRole);
        return R.ok();
    }

    @ApiOperation("角色管理 - 修改")
    @Log(module = "角色管理", descipt = "修改角色", type = LogEnum.UPDATE)
    @PostMapping("update")
    public R update(@RequestBody SysRoleEntity sysRole) {
        sysRoleService.update(sysRole);
        return R.ok();
    }

    @ApiOperation("角色管理 - 删除")
    @Log(module = "角色管理", descipt = "删除角色", type = LogEnum.DELETE)
    @DeleteMapping("delete")
    public R del(Integer id) {
        sysRoleService.del(id);
        return R.ok();
    }

    @ApiOperation("角色管理 - 查询角色关联的权限")
    @Log(module = "角色管理", descipt = "查询角色关联的权限", type = LogEnum.SELECT)
    @GetMapping("/relative/{roleId}")
    public R relative(@PathVariable("roleId") Integer roleId) {
        return R.ok(sysRoleService.relative(roleId));
    }

    @ApiOperation("角色管理 - 绑定权限")
    @Log(module = "角色管理", descipt = "绑定权限", type = LogEnum.INSERT)
    @PostMapping("/binding/{roleId}")
    public R binding(@PathVariable("roleId") Integer roleId, @RequestBody List<Integer> menuIds) {
        sysRoleService.binding(roleId, menuIds);
        return R.ok();
    }
}
